//天梯赛座位分配
#include<bits/stdc++.h>
using namespace std;
typedef struct school
{   
    int team;//学校队伍数量
    bool flag=true;//判断是否满座
    int ans[105];//存座位号
    int count=0;//存座位数
}sc;
sc a[105];
int main(){
    int n,k;
    cin>>n;
    k=n;
    for(int i=1;i<=k;i++)
        cin>>a[i].team;//读入队伍数量
    int pos=0;
    if(k==1){//1个学校1个队伍的情况
        cout<<"#1\n";
        for(int i=1;i<=19;i=i+2){   
            cout<<i;
            if(i<=17) cout<<" ";
        }
    }else{
    while(n){
        for(int i=1;i<=k;i++){
                if(a[i].flag){    
                    if(n==1){
                        pos+=2;
                        a[i].ans[++a[i].count]=pos-1;
                    }
                    else{
                        pos++;
                        a[i].ans[++a[i].count]=pos;
                    } 
                    if(a[i].count%10==0&&a[i].team>=1)
                        a[i].team--;
                    if(a[i].team==0){
                        n--;
                        a[i].flag=false;
                    } 
                }   
        }
    }
    for(int i=1;i<=k;i++){
        cout<<"#"<<i<<"\n";
        int len=a[i].count;
        for(int j=1;j<=len;j++){
            cout<<a[i].ans[j];
            if(j%10==0)
                cout<<"\n";
            else
                cout<<" ";    
        }    
    }
}
    return 0;
}